🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / core / testing / src / commonTest / kotlin / org / meshtastic / core / testing / FakeRadioControllerRestoreTest.kt
Displaying Raw • Download
core/testing/src/commonTest/kotlin/org/meshtastic/core/testing/FakeRadioControllerRestoreTest.kt 41414f832f938b655c97bc07509bc140ea16e2a3 (41414f83) Text, 5.56 KB
T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.core.testing
Tff7b72import T7ee787kotlinx.coroutines.CompletableDeferred
Tff7b72import T7ee787kotlinx.coroutines.async
Tff7b72import T7ee787kotlinx.coroutines.test.runCurrent
Tff7b72import T7ee787kotlinx.coroutines.test.runTest
Tff7b72import T7ee787org.meshtastic.proto.Channel
Tff7b72import T7ee787org.meshtastic.proto.ChannelSettings
Tff7b72import T7ee787org.meshtastic.proto.Config
Tff7b72import T7ee787kotlin.test.Test
Tff7b72import T7ee787kotlin.test.assertEquals
Tff7b72import T7ee787kotlin.test.assertFailsWith
Tff7b72import T7ee787kotlin.test.assertFalse
Tff7b72import T7ee787kotlin.test.assertNull
Tff7b72import T7ee787kotlin.test.assertTrue
Tff7b72class T56d364FakeRadioControllerRestoreTest Tb4b4b4{
Tf0883e@Test
Tff7b72fun Td2a8ffresetClearsRestoreSessionStateTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3controller Tff7b72= Te6edf3FakeRadioControllerTb4b4b4(Tb4b4b4)
Te6edf3controllerTb4b4b4.Te6edf3beforeRestoreLocalConfiguration Tff7b72= Tb4b4b4{ Te6edf3errorTb4b4b4(Ta5d6ff"Ta5d6ffstale hookTa5d6ff"Tb4b4b4) Tb4b4b4}
Te6edf3controllerTb4b4b4.Te6edf3selectedDeviceAddress Tff7b72= Ta5d6ff"Ta5d6ffx:DEVICETa5d6ff"
Te6edf3controllerTb4b4b4.Te6edf3setSessionGenerationTb4b4b4(T79c0ff7LTb4b4b4)
Te6edf3controllerTb4b4b4.Te6edf3resetTb4b4b4(Tb4b4b4)
Te6edf3assertNullTb4b4b4(Te6edf3controllerTb4b4b4.Te6edf3selectedDeviceAddressTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff0LTb4b4b4, Te6edf3controllerTb4b4b4.Te6edf3sessionGenerationTb4b4b4.Te6edf3valueTb4b4b4)
Te6edf3controllerTb4b4b4.Te6edf3selectedDeviceAddress Tff7b72= Ta5d6ff"Ta5d6ffx:DEVICETa5d6ff"
Te6edf3assertTrueTb4b4b4(
Te6edf3controllerTb4b4b4.Te6edf3restoreLocalConfigurationTb4b4b4(
Te6edf3expectedDeviceAddress Tff7b72= Ta5d6ff"Ta5d6ffx:DEVICETa5d6ff"Tb4b4b4,
Te6edf3config Tff7b72= Te6edf3ConfigTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3primaryChannel Tff7b72= Tff7b72nullTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffrestoreRequiresSelectedDeviceOwnershipTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3controller Tff7b72= Te6edf3FakeRadioControllerTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{ Te6edf3selectedDeviceAddress Tff7b72= Ta5d6ff"Ta5d6ffx:CURRENTTa5d6ff" Tb4b4b4}
Tff7b72val Te6edf3channel Tff7b72= Te6edf3ChannelTb4b4b4(Te6edf3index Tff7b72= T79c0ff0Tb4b4b4, Te6edf3settings Tff7b72= Te6edf3ChannelSettingsTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffPrimaryTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3config Tff7b72= Te6edf3ConfigTb4b4b4(Te6edf3lora Tff7b72= Te6edf3ConfigTb4b4b4.Te6edf3LoRaConfigTb4b4b4(Te6edf3use_preset Tff7b72= Tff7b72trueTb4b4b4)Tb4b4b4)
Te6edf3assertFalseTb4b4b4(
Te6edf3controllerTb4b4b4.Te6edf3restoreLocalConfigurationTb4b4b4(
Te6edf3expectedDeviceAddress Tff7b72= Ta5d6ff"Ta5d6ffx:STALETa5d6ff"Tb4b4b4,
Te6edf3config Tff7b72= Te6edf3configTb4b4b4,
Te6edf3primaryChannel Tff7b72= Te6edf3channelTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3assertTrueTb4b4b4(Te6edf3controllerTb4b4b4.Te6edf3localChannelsTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3assertTrueTb4b4b4(Te6edf3controllerTb4b4b4.Te6edf3localConfigsTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3assertTrueTb4b4b4(
Te6edf3controllerTb4b4b4.Te6edf3restoreLocalConfigurationTb4b4b4(
Te6edf3expectedDeviceAddress Tff7b72= Ta5d6ff"Ta5d6ffx:CURRENTTa5d6ff"Tb4b4b4,
Te6edf3config Tff7b72= Te6edf3configTb4b4b4,
Te6edf3primaryChannel Tff7b72= Te6edf3channelTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3listOfTb4b4b4(Te6edf3channelTb4b4b4)Tb4b4b4, Te6edf3controllerTb4b4b4.Te6edf3localChannelsTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3listOfTb4b4b4(Te6edf3configTb4b4b4)Tb4b4b4, Te6edf3controllerTb4b4b4.Te6edf3localConfigsTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffrestoreRejectsMissingSelectedDeviceOwnershipTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3controller Tff7b72= Te6edf3FakeRadioControllerTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3channel Tff7b72= Te6edf3ChannelTb4b4b4(Te6edf3index Tff7b72= T79c0ff0Tb4b4b4, Te6edf3settings Tff7b72= Te6edf3ChannelSettingsTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffPrimaryTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3config Tff7b72= Te6edf3ConfigTb4b4b4(Te6edf3lora Tff7b72= Te6edf3ConfigTb4b4b4.Te6edf3LoRaConfigTb4b4b4(Te6edf3use_preset Tff7b72= Tff7b72trueTb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3restored Tff7b72=
Te6edf3controllerTb4b4b4.Te6edf3restoreLocalConfigurationTb4b4b4(
Te6edf3expectedDeviceAddress Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3config Tff7b72= Te6edf3configTb4b4b4,
Te6edf3primaryChannel Tff7b72= Te6edf3channelTb4b4b4,
Tb4b4b4)
Te6edf3assertFalseTb4b4b4(Te6edf3restoredTb4b4b4)
Te6edf3assertTrueTb4b4b4(Te6edf3controllerTb4b4b4.Te6edf3localChannelsTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3assertTrueTb4b4b4(Te6edf3controllerTb4b4b4.Te6edf3localConfigsTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffrestorePropagatesConfigFailureAfterChannelWriteTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3controller Tff7b72=
Te6edf3FakeRadioControllerTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3selectedDeviceAddress Tff7b72= Ta5d6ff"Ta5d6ffx:CURRENTTa5d6ff"
Te6edf3throwOnSetLocalConfig Tff7b72= Tff7b72true
Tb4b4b4}
Tff7b72val Te6edf3channel Tff7b72= Te6edf3ChannelTb4b4b4(Te6edf3index Tff7b72= T79c0ff0Tb4b4b4, Te6edf3settings Tff7b72= Te6edf3ChannelSettingsTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffPrimaryTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3config Tff7b72= Te6edf3ConfigTb4b4b4(Te6edf3lora Tff7b72= Te6edf3ConfigTb4b4b4.Te6edf3LoRaConfigTb4b4b4(Te6edf3use_preset Tff7b72= Tff7b72trueTb4b4b4)Tb4b4b4)
Te6edf3assertFailsWithTff7b72<Te6edf3IllegalStateExceptionTff7b72> Tb4b4b4{
Te6edf3controllerTb4b4b4.Te6edf3restoreLocalConfigurationTb4b4b4(
Te6edf3expectedDeviceAddress Tff7b72= Ta5d6ff"Ta5d6ffx:CURRENTTa5d6ff"Tb4b4b4,
Te6edf3config Tff7b72= Te6edf3configTb4b4b4,
Te6edf3primaryChannel Tff7b72= Te6edf3channelTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3assertEqualsTb4b4b4(Te6edf3listOfTb4b4b4(Te6edf3channelTb4b4b4)Tb4b4b4, Te6edf3controllerTb4b4b4.Te6edf3localChannelsTb4b4b4)
Te6edf3assertTrueTb4b4b4(Te6edf3controllerTb4b4b4.Te6edf3localConfigsTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffrestoreSerializesWithDeviceSelectionTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3controller Tff7b72= Te6edf3FakeRadioControllerTb4b4b4(Tb4b4b4)
Te6edf3controllerTb4b4b4.Te6edf3setDeviceAddressTb4b4b4(Ta5d6ff"Ta5d6ffx:FIRSTTa5d6ff"Tb4b4b4)
Tff7b72val Te6edf3writeEntered Tff7b72= Te6edf3CompletableDeferredTff7b72<Tffa657UnitTff7b72>Tb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3releaseWrite Tff7b72= Te6edf3CompletableDeferredTff7b72<Tffa657UnitTff7b72>Tb4b4b4(Tb4b4b4)
Te6edf3controllerTb4b4b4.Te6edf3beforeRestoreLocalConfiguration Tff7b72= Tb4b4b4{
Te6edf3writeEnteredTb4b4b4.Te6edf3completeTb4b4b4(Tffa657UnitTb4b4b4)
Te6edf3releaseWriteTb4b4b4.Te6edf3awaitTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tff7b72val Te6edf3config Tff7b72= Te6edf3ConfigTb4b4b4(Te6edf3lora Tff7b72= Te6edf3ConfigTb4b4b4.Te6edf3LoRaConfigTb4b4b4(Te6edf3use_preset Tff7b72= Tff7b72trueTb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3restore Tff7b72= Te6edf3async Tb4b4b4{
Te6edf3controllerTb4b4b4.Te6edf3restoreLocalConfigurationTb4b4b4(
Te6edf3expectedDeviceAddress Tff7b72= Ta5d6ff"Ta5d6ffx:FIRSTTa5d6ff"Tb4b4b4,
Te6edf3config Tff7b72= Te6edf3configTb4b4b4,
Te6edf3primaryChannel Tff7b72= Tff7b72nullTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3writeEnteredTb4b4b4.Te6edf3awaitTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3selection Tff7b72= Te6edf3async Tb4b4b4{ Te6edf3controllerTb4b4b4.Te6edf3setDeviceAddressTb4b4b4(Ta5d6ff"Ta5d6ffx:SECONDTa5d6ff"Tb4b4b4) Tb4b4b4}
Te6edf3runCurrentTb4b4b4(Tb4b4b4)
Te6edf3assertFalseTb4b4b4(Te6edf3selectionTb4b4b4.Te6edf3isCompletedTb4b4b4, Ta5d6ff"Ta5d6ffdevice selection must wait for the in-flight restorationTa5d6ff"Tb4b4b4)
Te6edf3releaseWriteTb4b4b4.Te6edf3completeTb4b4b4(Tffa657UnitTb4b4b4)
Te6edf3assertTrueTb4b4b4(Te6edf3restoreTb4b4b4.Te6edf3awaitTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3selectionTb4b4b4.Te6edf3awaitTb4b4b4(Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffx:SECONDTa5d6ff"Tb4b4b4, Te6edf3controllerTb4b4b4.Te6edf3selectedDeviceAddressTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3listOfTb4b4b4(Te6edf3configTb4b4b4)Tb4b4b4, Te6edf3controllerTb4b4b4.Te6edf3localConfigsTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.06s